package com.wms.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.wms.entity.WUser;
import com.wms.dao.WUserDao;
import com.wms.mytool.MD5Util;
import com.wms.mytool.Result;
import com.wms.service.WUserService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.*;

import static com.wms.mytool.TokenUtil.createToken;

/**
 * 用户基本信息表(WUser)表服务实现类
 *
 * @author Li Xiaoyu
 */
@Service("wUserService")
public class WUserServiceImpl implements WUserService {
    @Resource
    private WUserDao wUserDao;

    /**
     * 通过ID查询单条数据
     *
     * @param userId 主键
     * @return 实例对象
     */
    @Override
    public WUser queryById(Integer userId) {
        QueryWrapper<WUser> qw = Wrappers.query();
        qw.eq("user_id", userId);
        return this.wUserDao.selectOne(qw);
    }

    /**
     * 根据用户名查询数据
     *
     * @param username 用户名
     * @return 实例对象
     */
    @Override
    public WUser queryByUserName(String username) {
        QueryWrapper<WUser> qw = Wrappers.query();
        qw.eq("username", username);
        return this.wUserDao.selectOne(qw);
    }


    /**
     * 登录验证
     *
     * @param username 用户名
     * @param password 密码
     * @return 实例对象
     */
    @Override
    public Result loginCheck(String username, String password) {
        //根据用户名查询数据
        QueryWrapper<WUser> qw = Wrappers.query();
        qw.eq("username", username);
        WUser w1 = this.wUserDao.selectOne(qw);
        //用户名存在，验证密码
        if (w1 != null) {
            if (w1.getUserType() == 0) {
                return new Result(400, null, "用户被禁用");
            } else {

                //与数据库中密码进行对比
                if (password.equals(w1.getPassword())) {
                    //密码一致，生成token，登录成功
                    String token = createToken(username);
                    Map<String, String> map = new HashMap<>();
                    map.put("token", token);
                    Map<String, WUser> map1 = new HashMap<>();
                    map1.put("user", w1);
                    List<Map> listMap = new ArrayList<Map>();
                    listMap.add(map);
                    listMap.add(map1);
                    return new Result(200, listMap, "success");
                } else {
                    //密码不一致，登录失败
                    return new Result(400, null, "密码错误");
                }
            }
        } else {
            //用户名不存在，登录失败
            return new Result(400, null, "用户名不存在");
        }
    }

    /**
     * 用户注册
     *
     * @param wUser 用户信息
     * @return 实例对象
     */
    @Override
    public Result userRegister(WUser wUser) {
        // 用户默认类型为普通用户，设置创建修改时间
        wUser.setCreateTime(new Date());
        if(wUser.getUserType()==null){
            wUser.setUserType(2);
        }
        wUser.setUpdateTime(new Date());
        //根据用户名查询数据
        QueryWrapper<WUser> qw = Wrappers.query();
        qw.eq("username", wUser.getUsername());
        WUser w1 = this.wUserDao.selectOne(qw);
        if (w1 != null) {
            return new Result(400, null, "用户名已存在");
        } else {
            try {
                int i = this.wUserDao.insert(wUser);
                return new Result(200, i, "添加成功");
            } catch (Exception e) {
                System.out.println(e);
                return new Result(400, null, "添加失败,请检查信息是否正确");
            }

        }

    }

    /**
     * 查询所有用户信息
     *
     * @return 实例对象
     */
    @Override
    public Result selectAllUser() {
        List<WUser> users = this.wUserDao.selectByMap(null);
        if (users != null) {
            return new Result(200, users, "查询成功");
        } else {
            return new Result(400, null, "查询失败");
        }
    }

    @Override
    public Result updateUser(WUser wUser) {
        wUser.setUpdateTime(new Date());
        int i = this.wUserDao.updateById(wUser);
        if(i==1){
            return new Result(200,i,"修改成功");
        }else{
            return new Result(400,null,"修改失败");
        }
    }

    @Override
    public Result deleteUserById(Integer id) {
        QueryWrapper<WUser> qw = Wrappers.query();
        qw.eq("user_id", id);
        int i = this.wUserDao.delete(qw);
        if(i==1){
            return new Result(200,i,"删除成功");
        }else{
            return new Result(400,null,"删除失败");
        }
    }
}

